Skip to content

RuntimeLibcalls: Fix dropping first libcall entry #147461

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

arsenm
Copy link
Contributor

@arsenm arsenm commented Jul 8, 2025

Fixes regression reported after #144973, which happened to
be acosf.

Copy link
Contributor Author

arsenm commented Jul 8, 2025

This stack of pull requests is managed by Graphite. Learn more about stacking.

@arsenm arsenm requested review from jhuber6 and sbc100 July 8, 2025 05:12
@arsenm arsenm marked this pull request as ready for review July 8, 2025 05:12
@llvmbot
Copy link
Member

llvmbot commented Jul 8, 2025

@llvm/pr-subscribers-llvm-ir
@llvm/pr-subscribers-lld

@llvm/pr-subscribers-lld-wasm

Author: Matt Arsenault (arsenm)

Changes

Fixes regression reported after #144973, which happened to
be acosf.


Full diff: https://github.com/llvm/llvm-project/pull/147461.diff

3 Files Affected:

  • (modified) lld/test/wasm/lto/Inputs/libcall-archive.ll (+8)
  • (modified) lld/test/wasm/lto/libcall-archive.ll (+24-2)
  • (modified) llvm/include/llvm/IR/RuntimeLibcalls.h (+2-2)
diff --git a/lld/test/wasm/lto/Inputs/libcall-archive.ll b/lld/test/wasm/lto/Inputs/libcall-archive.ll
index 30764af83e673..9722b283e692e 100644
--- a/lld/test/wasm/lto/Inputs/libcall-archive.ll
+++ b/lld/test/wasm/lto/Inputs/libcall-archive.ll
@@ -5,4 +5,12 @@ define void @memcpy() #0 {
   ret void
 }
 
+define float @acosf(float %x) {
+  ret float %x
+}
+
+define i128 @__umodti3(i128 %a, i128 %b) {
+  ret i128 %a
+}
+
 attributes #0 = { "target-features"="-bulk-memory,-bulk-memory-opt" }
diff --git a/lld/test/wasm/lto/libcall-archive.ll b/lld/test/wasm/lto/libcall-archive.ll
index 0cee9a5de29f6..84952c2e9d2a0 100644
--- a/lld/test/wasm/lto/libcall-archive.ll
+++ b/lld/test/wasm/lto/libcall-archive.ll
@@ -8,12 +8,28 @@
 target datalayout = "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-n32:64-S128-ni:1:10:20"
 target triple = "wasm32-unknown-unknown"
 
+@llvm.used = appending global [2 x ptr] [ptr @test_acosf, ptr @test___umodti3]
+
 define void @_start(ptr %a, ptr %b) #0 {
 entry:
   call void @llvm.memcpy.p0.p0.i64(ptr %a, ptr %b, i64 1024, i1 false)
   ret void
 }
 
+; Emit acosf, which currently happens to be the first runtime libcall
+; impl entry.
+define float @test_acosf(float %x) {
+  %acos = call float @llvm.acos.f32(float %x)
+  ret float %acos
+}
+
+; Emit __umodti3, which currently happens to be the last runtime
+; libcall impl entry.
+define i128 @test___umodti3(i128 %a, i128 %b) {
+  %urem = urem i128 %a, %b
+  ret i128 %urem
+}
+
 declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture, i64, i1)
 
 attributes #0 = { "target-features"="-bulk-memory,-bulk-memory-opt" }
@@ -22,6 +38,12 @@ attributes #0 = { "target-features"="-bulk-memory,-bulk-memory-opt" }
 ; CHECK-NEXT:    Name:            name
 ; CHECK-NEXT:    FunctionNames:
 ; CHECK-NEXT:      - Index:           0
-; CHECK-NEXT:        Name:            _start
+; CHECK-NEXT:        Name:            test_acosf
 ; CHECK-NEXT:      - Index:           1
-; CHECK-NEXT:        Name:            memcpy
+; CHECK-NEXT:        Name:            acosf
+; CHECK-NEXT:      - Index:           2
+; CHECK-NEXT:        Name:            test___umodti3
+; CHECK-NEXT:      - Index:           3
+; CHECK-NEXT:        Name:            __umodti3
+; CHECK-NEXT:      - Index:           4
+; CHECK-NEXT:        Name:            _start
diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.h b/llvm/include/llvm/IR/RuntimeLibcalls.h
index e9db7d1259009..cd052edff9a25 100644
--- a/llvm/include/llvm/IR/RuntimeLibcalls.h
+++ b/llvm/include/llvm/IR/RuntimeLibcalls.h
@@ -110,8 +110,8 @@ struct RuntimeLibcallsInfo {
   }
 
   ArrayRef<RTLIB::LibcallImpl> getLibcallImpls() const {
-    // Trim Unsupported from the start
-    return ArrayRef(LibcallImpls).drop_front();
+    // Trim UNKNOWN_LIBCALL from the back
+    return ArrayRef(LibcallImpls).drop_back();
   }
 
   /// Get the comparison predicate that's to be used to test the result of the

Fixes regression reported after #144973, which happened to
be acosf.
@arsenm arsenm force-pushed the users/arsenm/runtime-libcalls/fix-losing-first-libcall-impl-entry branch from c7633f6 to 01a82fa Compare July 8, 2025 05:13
@arsenm arsenm merged commit 2d3d0e5 into main Jul 8, 2025
9 checks passed
@arsenm arsenm deleted the users/arsenm/runtime-libcalls/fix-losing-first-libcall-impl-entry branch July 8, 2025 12:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants